package model

import (
	"context"
	"strconv"
	"time"
	"user-center/common"
	"user-center/config"
)

type User struct {
	Id           int       `gorm:"column:id"`           //用户id
	UserAccount  string    `gorm:"column:userAccount"`  //用户账号
	UserPassword string    `gorm:"column:userPassword"` //用户密码
	UserHead     string    `gorm:"column:userHead"`     //用户头像
	UserAuth     int       `gorm:"column:userAuth"`     //用户权限1是管理，0不是
	IsDelete     int       `gorm:"column:isDelete"`     //用户状态，1是被删，0不是
	UserSex      int       `gorm:"column:userSex"`      //用户性别，1是男，0是女
	CreateTime   time.Time `gorm:"column:createTime"`   //创建时间
	UpdateTime   time.Time `gorm:"column:updateTime"`   //更新时间
}

// Tabler 修改数据库映射表名
type Tabler interface {
	TableName() string
}

// TableName 会将 User 的表名重写为 `profiles`
func (User) TableName() string {
	return "user"
}

// GetUserByCondition
/*
根据条件id进行查询
user, err := GetUserByCondition(&User{Id: 1}) 能查出id = 1的数据
*/
func GetUserByCondition(condition interface{}) (User, error) {
	db, _ := config.InitMysql()
	var user User
	err := db.Where(condition).First(&user).Error
	return user, err
}

// GetLoginUser
/*
获取当前登录的用户
*/
func GetLoginUser() User {
	rdb := config.InitRedis()
	UserSessionId, err := rdb.Get(context.Background(), common.UserLoginSession).Result()
	if err != nil {
		return User{}
	}
	userId, _ := strconv.Atoi(UserSessionId)
	user, err := GetUserByCondition(User{Id: userId})
	if err != nil {
		return User{}
	}
	return user
}

// GetAllUser
/*查询所有的用户
userList, err := GetAllUser()
*/
func GetAllUser() ([]User, error) {
	db, _ := config.InitMysql()
	var userList []User
	err := db.Find(&userList).Error
	return userList, err
}

// SaveUser
/*
保存用户
成功返回ture
失败返回错误信息。
*/
func SaveUser(data interface{}) error {
	db, _ := config.InitMysql()
	err := db.Save(data).Error
	if err != nil {
		return err
	}
	return nil
}
